import random
from datetime import datetime,timedelta

from flask import current_app

from info import create_app,db,models  # 导入的目的是为了知道models的存在，可以做迁移
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand

from info.models import User

app = create_app('product')

# 创建Manager对象管理app
manager = Manager(app)

# 使用Migrate关联app和db，用于数据库迁移
Migrate(app,db)
# 给manager添加操作命令
manager.add_command('db',MigrateCommand)

# 创建管理员方法，通过flask_script提供的option装饰器
# 参数说明：１，传递的值，２，说明参数１，３，传入值的形式参数
@manager.option('-u','--username',dest='username')
@manager.option('-p','--password',dest='password')
def create_superuser(username,password):
    # 创建对象并添加属性
    admin = User()
    admin.nick_name = username
    admin.mobile = username
    admin.password = password
    admin.is_admin = True

    # 添加到数据库
    try:
        db.session.add(admin)
    except Exception as e:
        current_app.logger.error(e)
        return '创建失败'
    return '创建成功'


# 添加测试数据
@manager.option('-t','--test',dest='test')
def create_test_user(test):

    # 用户容器
    user_list = []

    for i in range(1,1000):
        user = User()
        user.mobile = '180%08d'%i
        user.nick_name = '神州%d号'%i
        user.password = "111111"
        # 现在时间减去一个时间随机数
        user.last_login = datetime.now() - timedelta(seconds=random.randint(0,3600*24*31))

        user_list.append(user)

    try:
        db.session.add_all(user_list)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        return '创建失败'

    return '创建成功'

if __name__ == "__main__":
    # print(app.url_map)
    manager.run()